package site.marqstree.smartbutler.fragment;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

import com.kymjs.rxvolley.RxVolley;
import com.kymjs.rxvolley.client.HttpCallback;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

import butterknife.Unbinder;
import site.marqstree.smartbutler.R;
import site.marqstree.smartbutler.adapter.ChatListAdapter;
import site.marqstree.smartbutler.entity.ChatListData;
import site.marqstree.smartbutler.util.L;
import site.marqstree.smartbutler.util.StaticClass;

/*
 * 项目名: SmartButler
 * 包名: site.marqstree.smartbutler.fragment
 * 文件名: ButlerFragment
 * 创建者: marqstree
 * 创建时间: 2019/12/27 14:17
 * 描述: TODO
 */
public class ButlerFragment extends Fragment implements View.OnClickListener {

    //ButterKnife解绑对象
    private Unbinder mUnbinder;

    private ListView mChatListView;

    private List<ChatListData> mList = new ArrayList<>();
    private ChatListAdapter adapter;

    //输入框
    private EditText et_text;
    //发送按钮
    private Button btn_send;

    //1.将布局文件fragment_tab转换为View
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_butler, null);
        findView(view);
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        //解除ButterKnife绑定
        mUnbinder.unbind();
    }

    //供外部调用，生成TabFragment实例，而不是new方式
    //此方法：采用Bundle模式，传入参数
    // 1）采用Bundle模式的好处：
    // 在用户中断操作，应用被系统放置在后台运行，系统自动保存Bundle，
    // 此Fragment可能会被系统销毁
    //当用户切换回此Fragment时，系统会自动调用onCreate方法，恢复自动保存的Bundle
    // 2）采用new方式创建Fragment不会自动恢复参数，导致Fragment中的数据丢失，界面空白。
    public static ButlerFragment newInstance() {
        ButlerFragment butlerFragment = new ButlerFragment();
        return butlerFragment;
    }


    //初始化View
    private void findView(View view) {
        mChatListView = (ListView) view.findViewById(R.id.mChatListView);
        et_text = (EditText) view.findViewById(R.id.et_text);
        btn_send = (Button) view.findViewById(R.id.btn_send);
        btn_send.setOnClickListener(this);

        //设置适配器
        adapter = new ChatListAdapter(getActivity(), mList);
        mChatListView.setAdapter(adapter);
        addLeftItem("你好，我是铁木渣!");
    }

    //点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_send:
                /**
                 * 逻辑
                 * 1.获取输入框的内容
                 * 2.判断是否为空
                 * 3.判断长度不能大于30
                 * 4.清空当前的输入框
                 * 5.添加你输入的内容到right item
                 * 6.发送给机器人请求返回内容
                 * 7.拿到机器人的返回值之后添加在left item
                 */
                //1.获取输入框的内容
                String text = et_text.getText().toString();
                //2.判断是否为空
                if (TextUtils.isEmpty(text)) {
                    Toast.makeText(getActivity(), R.string.text_tost_empty, Toast.LENGTH_SHORT).show();
                    return;
                }
                //3.判断长度不能大于30
                if (text.length() > 30) {
                    Toast.makeText(getActivity(), R.string.text_more_length, Toast.LENGTH_SHORT).show();
                    return;
                }
                //4.清空当前的输入框
                et_text.setText("");
                //5.添加你输入的内容到right item
                addRightItem(text);
                //6.发送给机器人请求返回内容
                String url = "http://op.juhe.cn/robot/index?info=" + text
                        + "&key=" + StaticClass.CHAT_LIST_KEY;
                RxVolley.get(url, new HttpCallback() {
                    @Override
                    public void onSuccess(String t) {
                        //Toast.makeText(getActivity(), "Json:" + t, Toast.LENGTH_SHORT).show();
                        L.i("Json" + t);
                        parsingJson(t);
                    }
                });
                break;
        }
    }

    //解析Json
    private void parsingJson(String t) {
        try {
            JSONObject jsonObhect = new JSONObject(t);
            JSONObject jsonresult = jsonObhect.getJSONObject("result");
            //拿到返回值
            String text = jsonresult.getString("text");
            //7.拿到机器人的返回值之后添加在left item
            addLeftItem(text);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    //添加左边文本
    private void addLeftItem(String text) {
        ChatListData date = new ChatListData();
        date.setType(ChatListAdapter.VALUE_LEFT_TEXT);
        date.setText(text);
        mList.add(date);
        //通知adapter刷新
        adapter.notifyDataSetChanged();
        //滚动到底部
        mChatListView.setSelection(mChatListView.getBottom());
    }

    //添加右边文本
    private void addRightItem(String text) {
        ChatListData date = new ChatListData();
        date.setType(ChatListAdapter.VALUE_RIGHT_TEXT);
        date.setText(text);
        mList.add(date);
        //通知adapter刷新
        adapter.notifyDataSetChanged();
        //滚动到底部
        mChatListView.setSelection(mChatListView.getBottom());
    }
}